package top.stmo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 *      Request是请求对象
 *      Response是响应对象。
 *
 *      request:获取请求数据
 *          浏览器会发送HTTP请求到后台服务器[Tomcat]
 *          HTTP的请求中会包含很多请求数据[请求行+请求头+请求体]
 *          后台服务器[Tomcat]会对HTTP请求中的数据进行解析并把解析结果存入到一个对象中
 *          所存入的对象即为request对象，所以我们可以从request对象中获取请求的相关参数
 *          获取到数据后就可以继续后续的业务，比如获取用户名和密码就可以实现登录操作的相关业务
 *      response:设置响应数据
 *          业务处理完后，后台就需要给前端返回业务处理的结果即响应数据
 *          把响应数据封装到response对象中
 *          后台服务器[Tomcat]会解析response对象,按照[响应行+响应头+响应体]格式拼接结果
 *          浏览器最终解析结果，把内容展示在浏览器给用户浏览
 *
 *      request对象是用来封装请求数据的对象
 *      response对象是用来封装响应数据的对象
 *
 *      --------------------------- Request的继承体系 ------------------------
 *
 *      ServletRequest   ->      HttpServletRequest      ->     RequestFacade
 *
 *   java提供的请求对象根接口    java提供的对Http协议封装的请求对象根接口     Tomcat定义的实现类
 *
 *    小结：
 *      Request的继承体系为ServletRequest-->HttpServletRequest-->RequestFacade
 *      Tomcat需要解析请求数据，封装为request对象,并且创建request对象传递到service方法
 *      使用request对象，可以查阅JavaEE API文档的HttpServletRequest接口中方法说明
 *
 *      HTTP请求数据总共分为三部分内容，分别是请求行、请求头、请求体
 *
 *      请求行包含三块内容，分别是请求方式、请求资源路径、HTTP协议及版本
 *
 *  String getMethod()            获取请求方式: GET
 *  String getContextPath()       获取虚拟目录(项目访问路径): /request-demo
 *  StringBuffer getRequestURL()  获取URL: http://localhost:8080/request-demo/req1
 *  String getRequestURI()        获取URI(统一资源标识符): /request-demo/req1
 *  String getQueryString()       获取请求参数(GET方式): username=zhangsan&password=123
 *
 *
 *      对于请求头的数据，格式为key: value
 *
 *      根据请求头名称获取对应值的方法为：
 *          String getHeader(String name)
 *
 *      浏览器在发送GET请求的时候是没有请求体的，所以需要把请求方式变更为POST
 *
 *      Request对象提供了如下两种方式来获取其中的数据：
 *
 *          ServletInputStream getInputStream()
 *          该方法可以获取字节
 *
 *          获取字符输入流，如果前端发送的是纯文本数据，则使用该方法
 *          BufferedReader getReader()
 *
 *  总结：
 *      请求行
 *           getMethod()                获取请求方式
 *           getContextPath()           获取项目访问路径
 *           getRequestURL()            获取请求URL
 *           getRequestURI()            获取请求URI
 *           getQueryString()           获取GET请求方式的请求参数
 *      请求头
 *           getHeader(String name)     根据请求头名称获取其对应的值
 *      请求体
 *           如果是纯文本数据:              getReader()
 *           如果是字节数据如文件数据:        getInputStream()
 *
 *           注意: 浏览器发送的POST请求才有请求体
 *
 */
@WebServlet("/req1")
public class Request1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                                            throws ServletException, IOException {
        System.out.println("-------------------------------------");
        String method = req.getMethod();
        System.out.println(method);
        String contextPath = req.getContextPath();
        System.out.println(contextPath);
        StringBuffer requestURL = req.getRequestURL();
        System.out.println(requestURL);
        String requestURI = req.getRequestURI();
        System.out.println(requestURI);
        String queryString = req.getQueryString();
        System.out.println(queryString);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                                        throws ServletException, IOException {
        System.out.println("-----------------------------");
    }
}
